package com.socialuni.common.user.sdk.utils;

import com.socialuni.common.utils.RequestUtil;
import com.socialuni.common.utils.UUIDUtil;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;

@Component
@Slf4j
public class CommonTokenUtil {
    //key 这样可以保证每次请求生成的token一致，方便测试
    private static String tokenSecretKey;

    @Value("${socialuni.user.token-secret-key:tokenSecretKey}")
    public void setTokenKey(String tokenKey) {
        CommonTokenUtil.tokenSecretKey = tokenKey;
    }

    private static String tokenName;

    @Value("${socialuni.user.token-name:token}")
    public void setTokenName(String tokenName) {
        CommonTokenUtil.tokenName = tokenName;
    }

    public static String getToken() {
        HttpServletRequest request = RequestUtil.getRequest();
        String token = request.getHeader(tokenName);
        System.out.println(token);
        if (CommonTokenUtil.isSuccess(token)) {
            return token;
        }
        return null;
    }

    public static String generateTokenById(Integer userId) {
        //生成的时候使用商户号，因为token中不存储敏感信息
        return Jwts.builder()//返回的字符串便是我们的jwt串了
                //先用userid，以后可以改为用uid
                .setSubject(userId + "_" + UUIDUtil.getUUID())//设置主题
                .signWith(SignatureAlgorithm.HS256, tokenSecretKey)//设置算法（必须）
                .compact();//这个是全部设置完成后拼成jwt串的方法
    }

    //判断是否有效token
    public static boolean isSuccess(String token) {
        return !CommonTokenUtil.isError(token);
    }

    public static Boolean isError(String token) {
        return StringUtils.isEmpty(token)
                || "undefined".equals(token)
                || "null".equals(token)
                || "[object Null]".equals(token)
                || token.length() == 32;
    }
}